package com.shitou.springai1.user.service;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.shitou.springai1.admin.entity.dto.ImageDto;
import com.shitou.springai1.user.entity.EnhancedSearchResult;
import com.shitou.springai1.user.entity.ParsedQuery;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

// EnhancedImageSearchService.java
@Service
@Slf4j
public class EnhancedImageSearchService {

    @Autowired
    private ImageSearchService imageSearchService; // 您原有的搜索服务

    @Autowired
    private SemanticParserService semanticParserService;

    /**
     * 增强的搜索方法，包含意图识别和语义理解
     */
    public EnhancedSearchResult enhancedSearch(String userInput) {
        log.info("开始增强搜索: {}", userInput);

        EnhancedSearchResult result = new EnhancedSearchResult();
        result.setOriginalQuery(userInput);
        result.setTimestamp(LocalDateTime.now());

        try {
            // 1. 语义解析
            ParsedQuery parsedQuery = semanticParserService.parseQuery(userInput);
            result.setParsedQuery(parsedQuery);

            // 2. 构建搜索查询
            String searchQuery = buildSearchQuery(parsedQuery);
            result.setActualSearchQuery(searchQuery);

            log.info("构建搜索查询: {}", searchQuery);
            // 3. 执行搜索
            List<ImageDto> searchResults = imageSearchService.searchImages(searchQuery);
            result.setSearchResults(searchResults);

            // 4. 生成响应消息
            String responseMessage = generateResponseMessage(parsedQuery, searchResults);
            result.setResponseMessage(responseMessage);

            result.setSuccess(true);

        } catch (Exception e) {
            log.error("增强搜索失败", e);
            result.setSuccess(false);
            result.setErrorMessage("搜索处理失败: " + e.getMessage());

            // 失败时尝试直接搜索
            try {
                List<ImageDto> fallbackResults = imageSearchService.searchImages(userInput);
                result.setSearchResults(fallbackResults);
                result.setResponseMessage("未找到相关信息，请尝试其他关键词。");
            } catch (Exception ex) {
                log.error("回退搜索也失败", ex);
            }
        }

        log.info("增强搜索完成: 找到 {} 个结果",
                result.getSearchResults() != null ? result.getSearchResults().size() : 0);

        return result;
    }

    private String buildSearchQuery(ParsedQuery parsedQuery) {
        if (parsedQuery.getSearchKeywords().isEmpty()) {
            return parsedQuery.getOriginalInput();
        }

        // 优先使用解析出的关键词
        return String.join(" ", parsedQuery.getSearchKeywords());
    }

    private String generateResponseMessage(ParsedQuery parsedQuery, List<ImageDto> results) {
        if (results.isEmpty()) {
            return generateNoResultsMessage(parsedQuery);
        }

        StringBuilder message = new StringBuilder();

        // 根据意图生成不同的响应开头
        switch (parsedQuery.getIntent()) {
            case LOCATION_QUERY:
                message.append("根据您的查询，找到以下位置信息：\n\n");
                break;
            case PEOPLE_QUERY:
                message.append("为您找到相关人员信息：\n\n");
                break;
            case PROCEDURE_QUERY:
                message.append("以下信息可能对您有帮助：\n\n");
                break;
            default:
                message.append("搜索结果显示：\n\n");
        }

        // 添加结果信息
        for (int i = 0; i < Math.min(results.size(), 5); i++) { // 最多显示5个结果
            ImageDto image = results.get(i);
            message.append(String.format("%d. %s\n", i + 1, image.getDescription()));

            if (StringUtils.isNotBlank(image.getImagesName())) {
                message.append(String.format("   文件: %s\n", image.getImagesName()));
            }
        }

        if (results.size() > 5) {
            message.append(String.format("\n... 还有 %d 个更多结果\n", results.size() - 5));
        }

        return message.toString();
    }

    private String generateNoResultsMessage(ParsedQuery parsedQuery) {
        switch (parsedQuery.getIntent()) {
            case LOCATION_QUERY:
                return "抱歉，没有找到相关的位置信息。您可以尝试搜索具体的地点名称，如'城远楼405'或'党委副书记办公室'。";
            case PEOPLE_QUERY:
                return "未找到相关人员信息，请确认名称是否正确。";
            case PROCEDURE_QUERY:
                return "暂无相关流程信息，建议您咨询相关部门。";
            default:
                return "未找到相关信息，请尝试其他搜索关键词。";
        }
    }
}

// EnhancedSearchResult.java
